/**
 * 将 iconfont 生成的 svg 文件中的单个图标提取出来
 */

const fs = require('fs');
const path = require('path');
const { dirname, basename } = require('path/posix');

const { resolve } = path;
const { readFile, writeFile } = fs;

// 需要处理的 SVG 文件
const svgPath = './iconfont.svg';

// 输出文件的存储路径
const outputPath = resolve(__dirname, './svg');

// 处理 SVG 的形变
const svgTransform = 'transform="translate(0 900)scale(1 -1)"';

// svg 文件模板
const svgTemplate = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" t="1584762969678" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="12392" width="200" height="200"><defs><style type="text/css"/></defs><path glyph-name="__gn__" unicode="__un__" d="__PATH__" ${svgTransform}/></svg>`;


//判断输出目录是否存在，不存在则橙黄计按目录
fs.stat(outputPath, (e, s) => {
    if (e || (!s.isDirectory() && !s.isFile() && !s.isSymbolicLink())) {
        fs.mkdir(outputPath, e => {
            if (e) {
                throw e;
            } else {
                console.debug('自动创建存储目录：' + outputPath + '\n');
            }
        });
    }
});

readFile(resolve(__dirname, svgPath), 'utf8', (err, res) => {
    if (!err) {
        counter = 0;
        const iconArray = res.match(/<glyph[^\n]*\/>/g);
        const unicodeMap = {};
        iconArray.forEach(item => {
            const unicode = item.match(/unicode="&#(\d+);"/)[1];
            const className = item.match(/glyph-name="([^"]+)"/)[1];

            unicodeMap[className] = (+unicode).toString(16);
            var svg = svgTemplate.replace('__PATH__', item.match(/d="([^"]*)"/)[1]).replace('__gn__', className).replace('__un__', unicode)
            var saveTo = resolve(outputPath, className + '.svg')
            writeFile(saveTo, svg, function (err) { if (err) { throw err } });
            console.debug(className + " 存储到 ." + basename(saveTo));
        });
        writeFile(
            resolve(outputPath, 'unicode-map.js'),
            'module.exports=' + JSON.stringify(unicodeMap),
            err => {
                if (err) {
                    throw err
                }
            });
        counter++;
        console.info("导出结束，本次共导出：" + counter + "个svg文件\n");
        console.info("接下来您可以将" + outputPath + "目录下的所有svg文件拖拽上传至iconfont.cn即可\n");
    } else {
        throw err
    }
});